package com.cs.beneficios.web.action;
import com.cs.beneficios.business.entity.AtributosDAO;
import com.cs.beneficios.business.entity.RestriccionDAO;
import com.cs.beneficios.business.entity.SubProgramaDAO;
import com.cs.beneficios.business.model.AtributoVO;
import com.cs.beneficios.business.model.Beneficiario_AtributoVO;
import com.cs.beneficios.common.ConnectionFactory;

import java.io.IOException;

import java.sql.SQLException;

//import java.text.SimpleDateFormat;
import java.util.LinkedList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class GuardarBeneficiosAction extends Action 
{
  /**
   * This is the main action called from the Struts framework.
   * @param mapping The ActionMapping used to select this instance.
   * @param form The optional ActionForm bean for this request.
   * @param request The HTTP Request we are processing.
   * @param response The HTTP Response we are processing.
   * @return 
   * @throws java.io.IOException
   * @throws javax.servlet.ServletException
   */
  public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
  {
    //ConnectionFactory cf = new ConnectionFactory("beneficios","beneficios");
	ConnectionFactory cf = new ConnectionFactory();
    HttpSession session = request.getSession();
    String strBeneficiario = (String)session.getAttribute("beneficiario");
    String strCodigoSubpro = (String)session.getAttribute("CodigoSubpro");
    session.setAttribute("CodigoSubpro",strCodigoSubpro);
    String strCodigoSede = request.getParameter("code");
    session.setAttribute("CodigoSede",strCodigoSede);
    Object obtercero = (Object)request.getParameter("tercero"); 
    session.setAttribute("Tercero",request.getParameter("tercero"));
    session.setAttribute("CostBenefit",request.getParameter("costbene"));
	session.setAttribute("TipoBenefit",request.getParameter("tipobene"));
    boolean insertar = true;
    boolean stop = true;
    boolean activo = true;
    int mensajes = 0;
    
    List lAtributo = (List)session.getAttribute("ListaAtributos");
    List lError = new LinkedList();
    List lInsertar = new LinkedList();
    List lAtriNoRestric = new LinkedList();
    List lAtriAlerta = new LinkedList();
    List lInsertTercero = new LinkedList();
    AtributosDAO objAtributoDAO;
    RestriccionDAO objRestDAO;
    SubProgramaDAO objSubProgramaDAO;
    
    String CodMaxBenefOtor="";
    
    int tamanolatri = lAtributo.size();
    
    String variable = "";
    String tipodato = "";
    String tipoatri = "";
    String codatri = "";
    int compara1 =0;
    int compara2 =0;
    
    // Proceso para convertir la fecha
    String strDateBenefit = (String)request.getParameter("date");
    String ArrDate[] = strDateBenefit.split("-");
    String strYear = ArrDate[0];
    String strMonth = ArrDate[1];
    String strDay = ArrDate[2];
    strDateBenefit = null;
    strDateBenefit = strDay+"/"+strMonth+"/"+strYear;
    
    session.setAttribute("DateBenefit", strDateBenefit);
    // Fin del proceso
    
    for(int j=0;j<tamanolatri;j++)
    {
      AtributoVO atri = (AtributoVO)lAtributo.get(j);
      String codigo = atri.getCodatributo();
      String obtenercod = "Atri"+codigo;   
      String obligacion = atri.getObligatorio();
      
      if(obligacion.equals("S"))
      {
         compara1++; 
         String obCodVeri = (String)request.getParameter(obtenercod);
          if(!obCodVeri.equals(""))
          {
            compara2++; 
          }else
          {
            String NomError = atri.getEtiqueta();
            lError.add(NomError);
          }
      }
    }
      
  
  //proceso para validar los campos con las restricciones
    if(compara1 == compara2)
    {
  //    try
  //    {
        if(obtercero!=null)
        {
          
          for(int i=0;i<tamanolatri;i++)
          {
             Beneficiario_AtributoVO objinsettercero = new Beneficiario_AtributoVO();
             AtributoVO atritercero = (AtributoVO)lAtributo.get(i);
                  
             String strCodiAtri = atritercero.getCodatributo();
             String strCodiRest = atritercero.getRestriccion();
             String strTipoAtri = atritercero.getTipoatributo();
             String strNombre = atritercero.getNombre();
             tipodato = atritercero.getTipodato();
             variable = request.getParameter("Atri"+atritercero.getCodatributo());
            
             if(strTipoAtri.equals("R"))
             {
                objinsettercero.setVariable(variable);
                objinsettercero.setTipodato(tipodato);
                objinsettercero.setCodigoatributo(strCodiAtri);
                objinsettercero.setCodbeneficiario(strBeneficiario);
                objinsettercero.setTipoatributo(strTipoAtri);
                lInsertar.add(objinsettercero);
                
             }else
             {
                objinsettercero.setVariable(variable);
                objinsettercero.setTipodato(tipodato);
                objinsettercero.setCodigoatributo(strCodiAtri);
                objinsettercero.setTipoatributo(strTipoAtri);
                lInsertar.add(objinsettercero);
               
             }
              
                
            objinsettercero.setVariable(variable);
            objinsettercero.setTipodato(tipodato);
            objinsettercero.setCodigoatributo(strCodiAtri);
            objinsettercero.setCodbeneficiario(strBeneficiario);
            objinsettercero.setTipoatributo(strTipoAtri);
            lInsertTercero.add(objinsettercero);
          }
          session.setAttribute("listatercero",lInsertTercero);
         
        }else
        {
           for(int i=0;i<tamanolatri;i++)
           {
              if(stop)
              {
                  Beneficiario_AtributoVO objBenAtriVO = new Beneficiario_AtributoVO();
                  AtributoVO atrirestri = (AtributoVO)lAtributo.get(i);
                  String strCodiAtri = atrirestri.getCodatributo();
                  String strCodiRest = atrirestri.getRestriccion();
                  String strTipoAtri = atrirestri.getTipoatributo();
                  String strNombre = atrirestri.getNombre();
                  tipodato = atrirestri.getTipodato();
              
                  if(tipodato.equals("F"))
                  {
                    String dia = request.getParameter("dia"+i);
                    String mes = request.getParameter("mes"+i);
                    String ano = request.getParameter("ano"+i);
                    variable = dia+"/"+mes+"/"+ano;
                  }else
                  {
                    variable = request.getParameter("Atri"+atrirestri.getCodatributo());
                    System.err.println("[GuardarBeneficiosAction]" + "Atri"+atrirestri.getCodatributo() + "::=" + variable);
                  }
                  
                  if((Object)strCodiRest != null)
                  {
                      try
                      {
                         objRestDAO = new RestriccionDAO(cf);
                         String ArrRest[] = objRestDAO.ValidarRestriccion(strCodiAtri,strCodiRest,variable,tipodato);
                         cf.closeConnection(objRestDAO.getConn());
                         if(ArrRest[0].equals("N"))
                         {
                           if(ArrRest[1].equals("true"))
                           {
                            
                               session.setAttribute("mensajes","1");
                            
                             
                             if(strTipoAtri.equals("R"))
                             {
                                objBenAtriVO.setVariable(variable);
                                objBenAtriVO.setTipodato(tipodato);
                                objBenAtriVO.setCodigoatributo(strCodiAtri);
                                objBenAtriVO.setCodbeneficiario(strBeneficiario);
                                objBenAtriVO.setTipoatributo(strTipoAtri);
                                lInsertar.add(objBenAtriVO);
                                
                             }else
                             {
                                objBenAtriVO.setVariable(variable);
                                objBenAtriVO.setTipodato(tipodato);
                                objBenAtriVO.setCodigoatributo(strCodiAtri);
                                objBenAtriVO.setTipoatributo(strTipoAtri);
                                lInsertar.add(objBenAtriVO);
                               
                             }
                           }else
                           {
                             insertar = false;
                             
                             session.setAttribute("mensajes","2");
                             atrirestri.setDescrest(ArrRest[2]);
                             String ver = atrirestri.getDescrest();
                             lAtriNoRestric.add(atrirestri);
                             
                             
                           }
                         }else
                         {
                            if(ArrRest[1].equals("false"))
                            {
                               session.setAttribute("mensajes","3");
                               atrirestri.setDescrest(ArrRest[2]);
                               lAtriAlerta.add(atrirestri);
                               
                               
                            }
                            if(strTipoAtri.equals("R"))
                            {
                               objBenAtriVO.setVariable(variable);
                               objBenAtriVO.setTipodato(tipodato);
                               objBenAtriVO.setCodigoatributo(strCodiAtri);
                               objBenAtriVO.setCodbeneficiario(strBeneficiario);
                               objBenAtriVO.setTipoatributo(strTipoAtri);
                               lInsertar.add(objBenAtriVO);
                            }else
                            {
                               objBenAtriVO.setVariable(variable);
                               objBenAtriVO.setTipodato(tipodato);
                               objBenAtriVO.setCodigoatributo(strCodiAtri);
                               objBenAtriVO.setTipoatributo(strTipoAtri);
                               lInsertar.add(objBenAtriVO);
                            }
                         }                    
                      }catch(SQLException e){
						System.err.println ("[GuardarbeneficiosAction]ERROR SQL");
						System.err.println("/******** TDSUB - cwsub");
						e.printStackTrace();
						System.err.println("TDSSPE - cwsub ********/");
                      }
                  }else
                  {
                    if(strTipoAtri.equals("R"))
                    {
                       objBenAtriVO.setVariable(variable);
                       objBenAtriVO.setTipodato(tipodato);
                       objBenAtriVO.setCodigoatributo(strCodiAtri);
                       objBenAtriVO.setCodbeneficiario(strBeneficiario);
                       objBenAtriVO.setTipoatributo(strTipoAtri);
                       lInsertar.add(objBenAtriVO);
                    }else
                    {
                       objBenAtriVO.setVariable(variable);
                       objBenAtriVO.setTipodato(tipodato);
                       objBenAtriVO.setCodigoatributo(strCodiAtri);
                       objBenAtriVO.setTipoatributo(strTipoAtri);
                       lInsertar.add(objBenAtriVO);
                     }
                  }
              }
           }
        }

      
        if(lAtriNoRestric.size()>0)
        {
           session.setAttribute("listanorestric",lAtriNoRestric);
        }else
        {
          session.removeAttribute("listanorestric");
        }
        
        if(lAtriAlerta.size()>0)
        {
          session.setAttribute("listaalerta",lAtriAlerta);
        }else
        {
          session.removeAttribute("listaalerta");
        }
         session.setAttribute("mensaje","1");
         session.setAttribute("listainsetar",lInsertar);
         
 //     }catch(SQLException e){
 //         e.printStackTrace();
 //     }
    }else
    {
      
      String Error = "Error";
      int tama = lError.size();
      String strTamaError=String.valueOf(tama);
      if(lAtriNoRestric.size()>0)
      {
         session.setAttribute("listanorestric",lAtriNoRestric);
      }else
      {
        session.removeAttribute("listanorestric");
      }
      
      if(lAtriAlerta.size()>0)
      {
        session.setAttribute("listaalerta",lAtriAlerta);
      }else
      {
        session.removeAttribute("listaalerta");
      }
      session.setAttribute("ListaErrores",lError);
      session.setAttribute("tamanoError",strTamaError);
      session.setAttribute("mensaje","2");
    }
      if((lAtriAlerta.size() > 0) || (lAtriNoRestric.size() > 0) || lError.size()>0)
      {
        return mapping.findForward("success");
      }else
      {
        return mapping.findForward("ver");
      }
      
   
    }
}